/* eslint-disable @typescript-eslint/no-explicit-any */
/*
 * @Description: 类型
 * @Author: HuiSir<https://gitee.com/huisir001>
 * @Date: 2025-07-28 16:54:38
 * @LastEditTime: 2025-08-05 10:32:07
 */
import { Ref } from "vue";
import {
  IToolsOptions,
  IRowBtnsOptions,
  FyTableInstance,
  Awaitable,
} from "@/ui";

/**
 * 行按钮配置类型
 */
export interface IPageRowBtnsOptions extends IRowBtnsOptions {
  /**
   * 新增弹窗保存API请求方法
   */
  addRequest?: ApiRequest<Record<string, any> | any>;
  /**
   * 编辑弹窗保存API请求方法
   */
  editRequest?: ApiRequest<Record<string, any> | any>;
  /**
   * 删除行API请求方法
   */
  delRequest?: ApiRequest<any>;
  /**
   * 触发删除前钩子，用于处理行数据, 返回请求参数
   */
  getParamsBeforeDelete?: (rowData: Record<string, any>) => Awaitable<any>;
  /**
   * 编辑弹窗提交前钩子，用于处理表单输入的数据
   */
  beforeEditSubmit?: (formData: Ref<Record<string, any>>) => Awaitable<void>;
  /**
   * 新增弹窗提交前钩子，用于处理表单输入的数据
   */
  beforeAddSubmit?: (formData: Ref<Record<string, any>>) => Awaitable<void>;
}

/**
 * 工具栏配置类型
 */
export interface IPageToolsOptions extends IToolsOptions {
  /**
   * 新增弹窗保存API请求方法
   */
  addRequest?: ApiRequest<Record<string, any> | any>;
  /**
   * 删除行API请求方法
   */
  delRequest?: ApiRequest<any>;
  /**
   * 触发删除前钩子，用于处理行数据, 返回请求参数
   */
  getParamsBeforeDelete?: (
    selection: FyTableInstance["selection"]
  ) => Awaitable<any>;

  /**
   * 新增弹窗提交前钩子，用于处理表单输入的数据
   */
  beforeAddSubmit?: (formData: Ref<Record<string, any>>) => Awaitable<void>;
}
